Modify 08-2-binary-search.rkt to design the following function:
;; binary-search-count : Nat (Nat -> Real) -> Nat
;; GIVEN: a natural number N, and a function f : Nat -> Real
;; WHERE: f is monotonic (ie, i<=j implies f(i) <= f(j))
;; RETURNS: the number of i in [0,N] s.t. f(i) = f(N)
;; EXAMPLES/TESTS:
; list-to-fn : ListOfReal -> (Nat -> Real)
(define (list-to-fn lst)
(lambda (n)
(list-ref lst n)))
(define fn1 (list-to-fn '(3 4 5 5 5 6 6 6 7 7 7 8)))
(begin-for-test
(check-equal?
(binary-search-count 11 fn1)
1)
(check-equal?
(binary-search-count 10 fn1)
3)
(check-equal?
(binary-search-count 9 fn1)
2)
(check-equal?
(binary-search-count 2 fn1)
1)
(check-equal?
(binary-search-count 3 fn1)
2)
(check-equal?
(binary-search-count 4 fn1)
3)
)
Remember that your invariants,halting measure, and termination argument are at least as important as your code.
Last modified: Thu Nov 5 13:43:20 Eastern Standard Time 2015